/*
  找最大值
  题目描述
    题目要求很简单，让你去找一个长度为 n 的序列的最大值。
  输入格式
    第一行输入一个整数 n，表示序列的长度。
    第二行输入 n 个整数，对应序列的 n 个整数。
  输出格式
    输出一个整数，该整数的值为这个序列中的最大值。
  提示：
    1. 该题可以使用分治法，每次将序列尽可能平分成两部分，先对每部分求最大值，
       然后将两个最大值的最大值返回为答案。
    2. 通常使用分治法解决问题时，我们需要解决如下几个问题：
         分治过程中有几个子问题？
         每个子问题分别是什么？
         分治边界又是什么？
       注意: 使用分治的方式编码实现时，通常会用到递归!
*/

#include <bits/stdc++.h>

using namespace std;

int a[1000010] = {};

/*
  对于数组 a，使用分治的方法求 a[s] ~ a[e] 之间的元素的最大值
  注意: 使用分治的方法进行编码时，通常会用到递归!
*/
int f(int s, int e) {
    if (e - s == 1) {
        return max(a[s], a[e]);
    } else if (e - s == 0) {
        return a[e];
    } else {
        int f1 = f(s, s + (e - s + 1) / 2 - 1);
        int f2 = f(s + (e - s + 1) / 2, e);
        return max(f1, f2);
    }
}

int main() {
    int n;

    cin >> n;
    for (int i = 1; i <= n; i++) {
        cin >> a[i];
    }

    int a1 = f(1, n);
    cout << a1;

    return 0;
}